
`timescale 1 ns / 10 ps

//  *************************************************************************
//  File : crc32zero32c
//  *************************************************************************
//  This program is controlled by a written license agreement.
//  Unauthorized Reproduction or Use is Expressly Prohibited. 
//  Copyright [c] 2000 Morethanip
//  info@morethanip.com
//  *************************************************************************
//   Version:    $Id: crc32zero32c.v,v 1.1 2009/07/09 00:23:23 dk Exp $
//   Author:     Morethanip, Daniel Koehler
//  *************************************************************************
//  Description:
// 
//  32 Bit Galois Field Multiplier with zero input data
//  *************************************************************************

module crc32zero32c (

   crc_in,
   crc_out);
   
input   [31:0] crc_in;          //  current CRC value
output  [31:0] crc_out;         //  new CRC value

wire    [31:0] crc_out; 
wire    [31:0] i; 

assign i = crc_in;

assign crc_out[0] =  i[0] ^ i[1] ^ i[2] ^ i[3] ^ i[4] ^ i[6] ^ i[7] ^ i[8] ^ i[16] ^ i[20] ^ i[22] ^ i[23] ^ i[26];
assign crc_out[1] =  i[1] ^ i[2] ^ i[3] ^ i[4] ^ i[5] ^ i[7] ^ i[8] ^ i[9] ^ i[17] ^ i[21] ^ i[23] ^ i[24] ^ i[27];
assign crc_out[2] =  i[0] ^ i[2] ^ i[3] ^ i[4] ^ i[5] ^ i[6] ^ i[8] ^ i[9] ^ i[10] ^ i[18] ^ i[22] ^ i[24] ^ i[25] ^ i[28];
assign crc_out[3] =  i[1] ^ i[3] ^ i[4] ^ i[5] ^ i[6] ^ i[7] ^ i[9] ^ i[10] ^ i[11] ^ i[19] ^ i[23] ^ i[25] ^ i[26] ^ i[29];
assign crc_out[4] =  i[2] ^ i[4] ^ i[5] ^ i[6] ^ i[7] ^ i[8] ^ i[10] ^ i[11] ^ i[12] ^ i[20] ^ i[24] ^ i[26] ^ i[27] ^ i[30];
assign crc_out[5] =  i[0] ^ i[3] ^ i[5] ^ i[6] ^ i[7] ^ i[8] ^ i[9] ^ i[11] ^ i[12] ^ i[13] ^ i[21] ^ i[25] ^ i[27] ^ i[28] ^ i[31];
assign crc_out[6] =  i[0] ^ i[2] ^ i[3] ^ i[9] ^ i[10] ^ i[12] ^ i[13] ^ i[14] ^ i[16] ^ i[20] ^ i[23] ^ i[28] ^ i[29];
assign crc_out[7] =  i[1] ^ i[3] ^ i[4] ^ i[10] ^ i[11] ^ i[13] ^ i[14] ^ i[15] ^ i[17] ^ i[21] ^ i[24] ^ i[29] ^ i[30];
assign crc_out[8] =  i[0] ^ i[2] ^ i[4] ^ i[5] ^ i[11] ^ i[12] ^ i[14] ^ i[15] ^ i[16] ^ i[18] ^ i[22] ^ i[25] ^ i[30] ^ i[31];
assign crc_out[9] =  i[0] ^ i[2] ^ i[4] ^ i[5] ^ i[7] ^ i[8] ^ i[12] ^ i[13] ^ i[15] ^ i[17] ^ i[19] ^ i[20] ^ i[22] ^ i[31];
assign crc_out[10] =  i[0] ^ i[2] ^ i[4] ^ i[5] ^ i[7] ^ i[9] ^ i[13] ^ i[14] ^ i[18] ^ i[21] ^ i[22] ^ i[26];
assign crc_out[11] =  i[1] ^ i[3] ^ i[5] ^ i[6] ^ i[8] ^ i[10] ^ i[14] ^ i[15] ^ i[19] ^ i[22] ^ i[23] ^ i[27];
assign crc_out[12] =  i[2] ^ i[4] ^ i[6] ^ i[7] ^ i[9] ^ i[11] ^ i[15] ^ i[16] ^ i[20] ^ i[23] ^ i[24] ^ i[28];
assign crc_out[13] =  i[0] ^ i[3] ^ i[5] ^ i[7] ^ i[8] ^ i[10] ^ i[12] ^ i[16] ^ i[17] ^ i[21] ^ i[24] ^ i[25] ^ i[29];
assign crc_out[14] =  i[0] ^ i[1] ^ i[4] ^ i[6] ^ i[8] ^ i[9] ^ i[11] ^ i[13] ^ i[17] ^ i[18] ^ i[22] ^ i[25] ^ i[26] ^ i[30];
assign crc_out[15] =  i[1] ^ i[2] ^ i[5] ^ i[7] ^ i[9] ^ i[10] ^ i[12] ^ i[14] ^ i[18] ^ i[19] ^ i[23] ^ i[26] ^ i[27] ^ i[31];
assign crc_out[16] =  i[1] ^ i[4] ^ i[7] ^ i[10] ^ i[11] ^ i[13] ^ i[15] ^ i[16] ^ i[19] ^ i[22] ^ i[23] ^ i[24] ^ i[26] ^ i[27] ^ i[28];
assign crc_out[17] =  i[2] ^ i[5] ^ i[8] ^ i[11] ^ i[12] ^ i[14] ^ i[16] ^ i[17] ^ i[20] ^ i[23] ^ i[24] ^ i[25] ^ i[27] ^ i[28] ^ i[29];
assign crc_out[18] =  i[0] ^ i[3] ^ i[6] ^ i[9] ^ i[12] ^ i[13] ^ i[15] ^ i[17] ^ i[18] ^ i[21] ^ i[24] ^ i[25] ^ i[26] ^ i[28] ^ i[29] ^ i[30];
assign crc_out[19] =  i[0] ^ i[1] ^ i[4] ^ i[7] ^ i[10] ^ i[13] ^ i[14] ^ i[16] ^ i[18] ^ i[19] ^ i[22] ^ i[25] ^ i[26] ^ i[27] ^ i[29] ^ i[30] ^ i[31];
assign crc_out[20] =  i[0] ^ i[3] ^ i[4] ^ i[5] ^ i[6] ^ i[7] ^ i[11] ^ i[14] ^ i[15] ^ i[16] ^ i[17] ^ i[19] ^ i[22] ^ i[27] ^ i[28] ^ i[30] ^ i[31];
assign crc_out[21] =  i[0] ^ i[2] ^ i[3] ^ i[5] ^ i[12] ^ i[15] ^ i[17] ^ i[18] ^ i[22] ^ i[26] ^ i[28] ^ i[29] ^ i[31];
assign crc_out[22] =  i[2] ^ i[7] ^ i[8] ^ i[13] ^ i[18] ^ i[19] ^ i[20] ^ i[22] ^ i[26] ^ i[27] ^ i[29] ^ i[30];
assign crc_out[23] =  i[0] ^ i[3] ^ i[8] ^ i[9] ^ i[14] ^ i[19] ^ i[20] ^ i[21] ^ i[23] ^ i[27] ^ i[28] ^ i[30] ^ i[31];
assign crc_out[24] =  i[2] ^ i[3] ^ i[6] ^ i[7] ^ i[8] ^ i[9] ^ i[10] ^ i[15] ^ i[16] ^ i[21] ^ i[23] ^ i[24] ^ i[26] ^ i[28] ^ i[29] ^ i[31];
assign crc_out[25] =  i[1] ^ i[2] ^ i[6] ^ i[9] ^ i[10] ^ i[11] ^ i[17] ^ i[20] ^ i[23] ^ i[24] ^ i[25] ^ i[26] ^ i[27] ^ i[29] ^ i[30];
assign crc_out[26] =  i[2] ^ i[3] ^ i[7] ^ i[10] ^ i[11] ^ i[12] ^ i[18] ^ i[21] ^ i[24] ^ i[25] ^ i[26] ^ i[27] ^ i[28] ^ i[30] ^ i[31];
assign crc_out[27] =  i[0] ^ i[1] ^ i[2] ^ i[6] ^ i[7] ^ i[11] ^ i[12] ^ i[13] ^ i[16] ^ i[19] ^ i[20] ^ i[23] ^ i[25] ^ i[27] ^ i[28] ^ i[29] ^ i[31];
assign crc_out[28] =  i[0] ^ i[4] ^ i[6] ^ i[12] ^ i[13] ^ i[14] ^ i[16] ^ i[17] ^ i[21] ^ i[22] ^ i[23] ^ i[24] ^ i[28] ^ i[29] ^ i[30];
assign crc_out[29] =  i[0] ^ i[1] ^ i[5] ^ i[7] ^ i[13] ^ i[14] ^ i[15] ^ i[17] ^ i[18] ^ i[22] ^ i[23] ^ i[24] ^ i[25] ^ i[29] ^ i[30] ^ i[31];
assign crc_out[30] =  i[3] ^ i[4] ^ i[7] ^ i[14] ^ i[15] ^ i[18] ^ i[19] ^ i[20] ^ i[22] ^ i[24] ^ i[25] ^ i[30] ^ i[31];
assign crc_out[31] =  i[0] ^ i[1] ^ i[2] ^ i[3] ^ i[5] ^ i[6] ^ i[7] ^ i[15] ^ i[19] ^ i[21] ^ i[22] ^ i[25] ^ i[31];


endmodule
